package com.cskaoyan.feign.config;

import com.cskaoyan.api.bean.Person;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 创建日期: 2023/01/06 14:44
 *
 * @author ciggar
 */
@FeignClient(name = "feign-provider46")
public interface ProviderFeignClient {


    // 此处对于参数，必须得加对应的注解，如果不加注解，会报错
    // 之前，参数由SpringMVC来解析，SpringMVC可以不加注解
    // 这里，参数由openFeign来解析，必须得加注解
    @GetMapping("call/v1")
    public String call(@RequestParam("name") String name);

    // openFeign其实是一个翻译的角色，帮助我们把方法翻译为 http请求
    // 目标url: http://feign-provider46/call/v1?name=xxx

    // 在openFeign调用这个call方法的时候
    // 1. 获取类 上面的FeignClient中的注解的值，这个值就是服务的名字
    // 2. 获取方法上的注解以及注解的值，注解的类型决定了http的请求类型，注解中的值决定了请求的路径
    // 3. 获取方法中参数的名字，其实就是方法参数中的注解的值
    // 4. 获取方法的参数值，其实就是 url后面跟的参数值

    // 其实在FeignClient中定义的方法和 远程的目标方法名 没有必要保持一致





    @PostMapping("call/v2")
    public String call2(@RequestBody Person person);


}
